package com.foo.designpattern.flyweight.SimplexFlyweight;

/**
 * com.foo.designpattern.flyweight.SimplexFlyweight
 * Created with IntelliJ IDEA.
 * Created by jiang on 2016-05-23 16:13.
 *
 * @Description 具体享元(ConcreteFlyweight)角色
 * 具体享元角色：实现抽象享元角色所规定出的接口。如果有内蕴状态的话，必须负责为内蕴状态提供磁盘空间。
 * 具体享元橘色类有一个内蕴状态，在本例中一个Characte类型的intrinsicState属性代表，它的值应当在享元对象被创建时赋予。
 * 所有的内蕴状态在对象创建之后，就不会再改变了。
 * 如果一个享元对象由外蕴状态的话，所有的外部状态都必须存储在客户端，在使用享元对象时，再由客户端传入享元对象。
 * 这里只有一个外蕴状态，operation()方法的参数state就是由外部传入的外蕴状态。
 */

public class ConcreteFlyweight implements Flyweight {
    private Character intrinsicState = null;

    /**
     * 构造函数：内蕴状态作为参数传入
     *
     * @param intrinsicState 内蕴状态参数
     */
    public ConcreteFlyweight(Character intrinsicState) {
        this.intrinsicState = intrinsicState;
    }

    /**
     * 外蕴状态作为参数传入方法中，改变方法的行为
     * 但是并不改变对象的内蕴状态
     *
     * @param state 外蕴状态参数
     */
    @Override
    public void operation(String state) {
        System.out.println("Intrinsic State = " + this.intrinsicState);
        System.out.println("Extrinsic State = " + state);
    }
}
